package com.ynkbny.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.ynkbny.lgapi.YnBk;
import com.ynkbny.service.TokenService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 杨亚
 * @version 1.0.0
 * @title YnBkService
 * @description <ToDo description class purpose>
 * @create 2023/11/20 14:48
 **/
@Service
public class YnBkService {

    @Resource
    private YnBk ynBk;

    @Resource
    private TokenService tokenService;

    @Value("${laoGou.getProjectAnaPage}")
    private String getProjectAnaPage;

    @Value("${laoGou.getDeviceAnaPage}")
    private String getDeviceAnaPage;

    /**
     * 根据项目ID获取项目分析列表
     *
     * @param projectId 项目ID
     * @param range     步长 1:日 2:月 3:年
     * @param start     开始时间（当前时间的毫秒数）
     * @return JSONObject
     */
    //获取项目分析页面
    public JSONObject projectAnaPage(String projectId, String range, String start) {
        //获取LaoGouToken
        String laoGouToken = tokenService.getLaoGouToken();
        //调用ynBk.getProjectAnaPage方法，传入getProjectAnaPage，laoGouToken，projectId，range，start参数，返回JSONObject
        return ynBk.getProjectAnaPage(getProjectAnaPage, laoGouToken, projectId, range, start);
    }

    /**
     * 通过项目id获取前一天的数据
     *
     * @param projectId 项目id
     * @return JSONObject
     */
    public JSONObject getOneDayProjectAnaListBypProjectId(String projectId) {
        // 步长 1:日 2:月 3:年
        String range = "1";
        // 获取的日期时间戳
        long start = getStart();
        return projectAnaPage(projectId, range, Long.toString(start));
    }

    /**
     * 根据项目ID获取项目分析列表
     *
     * @param projectId 项目ID
     * @return 项目分析列表
     */
    //根据项目id获取项目分析列表
    public List<String> getProjectAnaListBypProjectId(String projectId) {
        //调用getOneDayProjectAnaListBypProjectId方法获取项目分析列表
        JSONObject projectAnaPage = getOneDayProjectAnaListBypProjectId(projectId);
        //创建一个存储项目分析列表的list
        List<String> projectAnaList = new ArrayList<>();
        //遍历获取的项目分析列表
        projectAnaPage.getJSONObject("data").getJSONArray("R").forEach(item -> {
            //将item转换为JSONObject
            JSONObject jsonObject = (JSONObject) item;
            //将JSONObject中的name添加到list中
            projectAnaList.add(jsonObject.getString("name"));
        });
        //返回项目分析列表
        return projectAnaList;
    }

    /**
     * 根据设备ID获取设备分析列表
     *
     * @param deviceId 设备ID
     * @param range    步长 1:日 2:月 3:年
     * @param start    开始时间（当前时间的毫秒数）
     * @return JSONObject
     */
    //获取设备分析页面
    public JSONObject deviceAnaPage(String deviceId, String range, String start) {
        //获取LaoGouToken
        String laoGouToken = tokenService.getLaoGouToken();
        //调用ynBk.getDeviceAnaPage方法，传入参数getDeviceAnaPage，laoGouToken，deviceId，range，start
        return ynBk.getDeviceAnaPage(getDeviceAnaPage, laoGouToken, deviceId, range, start);
    }

    /**
     * 根据设备ID获取设备分析列表
     *
     * @param deviceId 设备ID
     * @return JSONObject
     */
    public JSONObject getOneDayDeviceAnaListByDeviceId(String deviceId) {
        // 步长 1:日 2:月 3:年
        String range = "1";
        // 获取的日期时间戳
        long start = getStart();
        return deviceAnaPage(deviceId, range, Long.toString(start));
    }

    /**
     * 获取前一天的时间戳（毫秒）
     *
     * @return
     */
    private static long getStart() {
        return System.currentTimeMillis() - 24 * 60 * 60 * 1000;
    }

    /**
     * 根据设备ID获取设备分析列表
     *
     * @param deviceId 设备ID
     * @return 设备分析列表
     */
    //根据设备ID获取设备分析列表
    public List<String> getDeviceAnaListByDeviceId(String deviceId) {
        //获取设备分析页面
        JSONObject deviceAnaPage = getOneDayDeviceAnaListByDeviceId(deviceId);
        //创建设备分析列表
        List<String> deviceAnaList = new ArrayList<>();
        //遍历设备分析页面中的数据
        deviceAnaPage.getJSONObject("data").getJSONArray("R").forEach(item -> {
            //将数据转换为JSONObject
            JSONObject jsonObject = (JSONObject) item;
            //将设备分析名称添加到设备分析列表中
            deviceAnaList.add(jsonObject.getString("name"));
        });
        //返回设备分析列表
        return deviceAnaList;
    }

}
